# Лекция: Статические члены и модификатор static в Java

Статические члены класса принадлежат самому классу, а не его экземплярам. Они могут быть доступны без создания объекта класса.

Статические члены объявляются с помощью ключевого слова `static`.

## Статические поля

Статическое поле принадлежит классу, а не его экземплярам. Все экземпляры класса имеют доступ к одному и тому же статическому полю.

```java
class MyClass {
    static int myField;
}
```

## Статические методы

Статический метод принадлежит классу, а не его экземплярам. Он может быть вызван без создания объекта класса.

```java
class MyClass {
    static void myMethod() {
        // код метода
    }
}
```

## Статические блоки

Статический блок используется для инициализации статических полей. Он выполняется один раз, когда класс загружается в память.

```java
class MyClass {
    static {
        // код блока
    }
}
```

---

# Практические задания

1. **Создайте класс `MyClass` со статическим полем `count` и методом `increment`, который увеличивает `count` на 1.** (Сложность: 1/5)
```java
class MyClass {
    static int count;

    static void increment() {
        count++;
    }
}
```

2. **Создайте класс `MathUtils` со статическим методом `sum`, который возвращает сумму двух чисел.** (Сложность: 2/5)
```java
class MathUtils {
    static int sum(int a, int b) {
        return a + b;
    }
}
```

3. **Создайте класс `DataManager` со статическим полем `data` и методами `loadData` и `getData`.** (Сложность: 2/5)
```java
class DataManager {
    static String data;

    static void loadData() {
        data = "Hello, world!";
    }

    static String getData() {
        return data;
    }
}
```

4. **Создайте класс `AppConfig` со статическими полями `version` и `name`, инициализированными в статическом блоке.** (Сложность: 3/5)
```java
class AppConfig {
    static String version;
    static String name;

    static {
        version = "1.0";
        name = "My App";
    }
}
```

5. **Создайте класс `Counter` со статическим полем `count` и методами `increment` и `getCount`. Создайте несколько объектов `Counter` и вызовите их метод `increment`. Выведите значение `count` после каждого вызова.** (Сложность: 3/5)
```java
class Counter {
    static int count;

    void increment() {
        count++;
    }

    static int getCount() {
        return count;
    }
}

Counter counter1 = new Counter();
counter1.increment();
System.out.println(Counter.getCount());

Counter counter2 = new Counter();
counter2.increment();
System.out.println(Counter.getCount());
```